#include <fstream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char** argv) {
  // ofstream 输出内容到文件
  //  使用 << 输出符，类似于 cout <<
  ofstream ofs("file_test.txt");
  vector<string> vec{"this", "is", "a", "test", "string", "\n", "this", "is", "another", "test", "line", "\n"};
  for (auto&& str : vec) {
    ofs << str;
    if (str != "\n") ofs << " ";
  }
  ofs.flush();  // 手动将内容刷到磁盘
  ofs.close();  // 打开文件后要关闭（自动flush）！！
  {
    // ifstream 从文件读取内容
    //  （1）使用 >> 输出符，类似于 cin >>
    ifstream ifs("file_test.txt");
    if (!ifs.is_open()) {
      cout << "open file error\n";
      return -1;
    }
    string str;
    int index = 0;
    while (ifs >> str) {  // >> 会一个单词一个单词读取，使用空字符分割，如空格、制表、换行符
      cout << index++ << ": " << str << "\n";
    }
    ifs.close();  // 打开文件后要关闭
  }
  {
    //  （2）使用 getline 一行一行读取到字符串，然后按行处理
    ifstream ifs2("file_test.txt");
    if (!ifs2.is_open()) {
      cout << "open file error\n";
      return -1;
    }
    string line;
    int index = 0;
    cout << "========================\n";
    while (getline(ifs2, line)) {  // >> 会一个单词一个单词读取，使用空字符分割，如空格、制表、换行符
      cout << index++ << ": " << line << "\n";
      // line 字符串保存了文本的一行,可以按需处理
      // ...
    }
    ifs2.close();  // 打开文件后要关闭
  }

  return 0;
}